//package com.doudou.commons.utils;
//
//import com.zhcf.backend.exception.BizException;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang3.StringUtils;
//
//import javax.validation.constraints.Email;
//import javax.validation.constraints.NotBlank;
//import javax.validation.constraints.NotNull;
//import javax.validation.constraints.Pattern;
//import java.lang.reflect.Field;
//import java.lang.reflect.InvocationTargetException;
//import java.lang.reflect.Method;
//
///**
// * 验证参数
// * @author anjingsi
// * @date 2020-04-03
// */
//@Slf4j
//public class CheckParamUtil {
//
//    private static String EMAIL_REGEX = "\\w+@\\w+\\.[a-z]+(\\.[a-z]+)?";
//
//    private static String EXCLUDE_VALUE = "serialVersionUID";
//
//    /**
//     * 参数验证
//     * @param t
//     * @param <T>
//     */
//    public static <T> void checkParam(T t) {
//        if (t == null) {
//            throw new BizException("参数不能为空");
//        }
//        Class<? extends Object> clazz = t.getClass();
//        Field[] fields = clazz.getDeclaredFields();
//        try{
//            for (Field field : fields) {
//                if(EXCLUDE_VALUE.equals(field.getName())){
//                    continue;
//                }
//                Method method = clazz.getMethod("get"+acronymToUpper(field.getName()), new Class[] {});
//                Object value = method.invoke(t, new Object[] {});
//                NotBlank notblank = field.getDeclaredAnnotation(NotBlank.class);
//                if(notblank != null && null != value && StringUtils.isEmpty(value.toString())){
//                    throw new BizException(notblank.message());
//                }
//                NotNull notNull = field.getDeclaredAnnotation(NotNull.class);
//                if(notNull != null && null == value){
//                    throw new BizException(notNull.message());
//                }
//                Pattern pattern = field.getDeclaredAnnotation(Pattern.class);
//                if(pattern != null){
//                    if(value == null){
//                        throw new BizException(pattern.message());
//                    }
//                    boolean matches = value.toString().matches(pattern.regexp());
//                    if(!matches){
//                        throw new BizException(pattern.message());
//                    }
//                }
//                Email email = field.getDeclaredAnnotation(Email.class);
//                if(email != null){
//                    if(value == null){
//                        throw new BizException(email.message());
//                    }
//                    boolean matches = value.toString().matches(EMAIL_REGEX);
//                    if(!matches){
//                        throw new BizException("邮箱格式不正确");
//                    }
//                }
//            }
//        }catch (NoSuchMethodException e) {
//            throw new BizException(e.getMessage());
//        } catch (IllegalAccessException e) {
//            throw new BizException(e.getMessage());
//        } catch (InvocationTargetException e) {
//            throw new BizException(e.getMessage());
//        }
//    }
//
//
//    private static String acronymToUpper(String str){
//        char[] chars = str.toCharArray();
//        if (chars[0] >= 'a' && chars[0] <= 'z') {
//            chars[0] = (char) (chars[0] - 32);
//        }
//        return new String(chars);
//    }
//}
